/**
 * @author by ligang on 2014/8/21.
 */

define(['../../core/lang/ClassUtil', './CommandBase', 'require', 'exports', 'module'],
    function (ClassUtil, CommandBase, require, exports, module) {
        /**
         * @class
         * @classdesc
         * 从命令管理基类继承的一个工具类，主要用来支持响应鼠标事件，
         * 主要支持的鼠标事件有鼠标按下、鼠标弹起、鼠标滑动、鼠标双击、鼠标单击、键盘按下、键盘弹起等事件。
         * 其中鼠标按下和鼠标弹起事件中，提供了一个button参数，这个参数是用来标识鼠标的左键或右键，button为0表示鼠标左键;button为2表示鼠标右键
         * @alias egis.gdm.ToolBase
         * @augments egis.gdm.CommandBase
         * @param {Object} [options]
         * @returns {egis.gdm.ToolBase} 返回工具类
         */
        var toolbase = function (opts) {
            var optss = opts || {}
            CommandBase.call(this, optss);
        }
        ClassUtil.extend2(toolbase, CommandBase);

        /**
         * 鼠标按键按下时的处理方法
         * @fires egis.gdm.ToolBase#mousedown
         * @param {Number} button 按下的鼠标按键,用来标识鼠标的左键或右键，button为0表示鼠标左键;button为2表示鼠标右键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         * @param {Number} screenx 事件发生时鼠标在屏幕上的X坐标
         * @param {Number} screeny 事件发生时鼠标在屏幕上的Y坐标
         * @param {Number} mapx 鼠标在地图上的X坐标
         * @param {Number} mapy 鼠标在地图上的Y坐标
         * @param {Boolean} handled 该事件是否已经不需要再处理
         */
        toolbase.prototype.onMouseDown = function (button, shift, screenx, screeny, mapx, mapy, handled) {
        }

        /**
         * 鼠标按键按下后抬起的处理方法
         * @fires egis.gdm.ToolBase#mouseup
         * @param {Number} button 按下的鼠标按键,用来标识鼠标的左键或右键，button为0表示鼠标左键;button为2表示鼠标右键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         * @param {Number} screenx 事件发生时鼠标在屏幕上的X坐标
         * @param {Number} screeny 事件发生时鼠标在屏幕上的Y坐标
         * @param {Number} mapx 鼠标在地图上的X坐标
         * @param {Number} mapy 鼠标在地图上的Y坐标
         * @param {Boolean} handled 该事件是否已经不需要再处理
         */
        toolbase.prototype.onMouseUp = function (button, shift, screenx, screeny, mapx, mapy, handled) {
        }

        /**
         * 鼠标位置发生改变时的处理方法
         * @fires egis.gdm.ToolBase#mousemove
         * @param {Number} button 按下的鼠标按键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         * @param {Number} screenx 事件发生时鼠标在屏幕上的X坐标
         * @param {Number} screeny 事件发生时鼠标在屏幕上的Y坐标
         * @param {Number} mapx 鼠标在地图上的X坐标
         * @param {Number} mapy 鼠标在地图上的Y坐标
         * @param {Boolean} handled 该事件是否已经不需要再处理
         */
        toolbase.prototype.onMouseMove = function (button, shift, screenx, screeny, mapx, mapy, handled) {
        }

        /**
         * 鼠标单击事件处理方法
         * @fires egis.gdm.ToolBase#mouseclick
         * @param {Number} button 按下的鼠标按键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         * @param {Number} screenx 事件发生时鼠标在屏幕上的X坐标
         * @param {Number} screeny 事件发生时鼠标在屏幕上的Y坐标
         * @param {Number} mapx 鼠标在地图上的X坐标
         * @param {Number} mapy 鼠标在地图上的Y坐标
         * @param {Boolean} handled 该事件是否已经不需要再处理
         */
        toolbase.prototype.onMouseClick = function (button, shift, screenx, screeny, mapx, mapy, handled) {
        }

        /**
         * 鼠标双击事件处理方法
         * @fires egis.gdm.ToolBase#dbclick
         * @param {Number} button 按下的鼠标按键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         * @param {Number} screenx 事件发生时鼠标在屏幕上的X坐标
         * @param {Number} screeny 事件发生时鼠标在屏幕上的Y坐标
         * @param {Number} mapx 鼠标在地图上的X坐标
         * @param {Number} mapy 鼠标在地图上的Y坐标
         * @param {Boolean} handled 该事件是否已经不需要再处理
         */
        toolbase.prototype.onDblclick = function (button, shift, screenx, screeny, mapx, mapy, handled) {
        }

        /**
         * 键盘按键按下时处理方法
         * @fires egis.gdm.ToolBase#keydown
         * @param {Number} keyCode 按键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         */
        toolbase.prototype.onKeyDown = function (keyCode, shift) {
        }

        /**
         * 键盘按键按下以后按键弹起时的处理方法
         * @fires egis.gdm.ToolBase#keyup
         * @param {Number} keyCode 按键
         * @param {Boolean} shift 是否同时按下键盘上的shift键
         */
        toolbase.prototype.onKeyUp = function (keyCode, shift) {
        }

        /**
         * 鼠标单击事件处理方法
         * @fires egis.gdm.ToolBase#click
         * @param {Object} param 传入的参数
         */
        toolbase.prototype.onClick = function (param) {
        }

        /**
         * 鼠标没有活动的时候的处理方法
         */
        toolbase.prototype.deactivate = function () {
        }

        module.exports = toolbase;
        return toolbase;

    })